1. Technical Field
This invention generally relates to object-oriented programming and more specifically relates to an improved system for managing version changes for classes in object-oriented environments.
2. Background Art
The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely sophisticated devices, and computer systems may be found in many different settings. Computer systems typically include a combination of hardware (e.g., semiconductors, circuit boards, etc.) and software (e.g., computer programs). As advances in semiconductor processing and computer architecture push the performance of the computer hardware higher, more sophisticated computer software has evolved to take advantage of the higher performance of the hardware, resulting in computer systems today that are much more powerful than just a few years ago.
Computer systems typically include operating system software that controls the basic function of the computer, and one or more software application programs that run under the control of the operating system to perform desired tasks. For example, a typical IBM Personal Computer may run the OS/2 operating system, and under the control of the OS/2 operating system, a user may execute an application program, such as a word processor. As the capabilities of computer systems have increased, the application software programs designed for high performance computer systems have become extremely powerful. Additionally, software development costs have continued to rise because more powerful and complex programs take more time, and hence more money, to produce.
One way in which the performance of application software programs has been improved while the associated development costs have been reduced is by using object-oriented programming concepts. The goal of using object-oriented programming is to create small, reusable sections of program code known as "objects" that can be quickly and easily combined and re-used to create new programs. This is similar to the idea of using the same set of building blocks again and again to create many different structures. The modular and re-usable aspects of objects will typically speed development of new programs, thereby reducing the costs associated with the development cycle. In addition, by creating and re-using a comprehensive set of well-tested objects, a more stable, uniform, and consistent approach to developing new computer programs can be achieved.
Another central concept in object-oriented programming is the "class." A class is a template or prototype that defines a type of object. A class outlines or describes the characteristics or makeup of objects that belong to that class. By defining a class, objects can be created that belong to the class without having to rewrite the entire definition for each new object as it is created. This feature of object-oriented programming promotes the reusability of existing object definitions and promotes more efficient use of code.
JAVA is the name of one very well-known and popular object-oriented computer programming language which is used to develop software applications. JAVA's popularity stems in part from its relative simplicity and the fact that JAVA is written in a manner that allows different computers (i.e., platforms) to execute the same JAVA code. In other words, JAVA is platform-independent. This feature has caused the use of JAVA to greatly increase with the growing popularity of the Internet, which allows many different type of computer platforms to communicate with each other.
Computer programs naturally evolve over time. The evolution of object-oriented computer programs entails defining new classes that have implementations different than previous versions. As time passes, the type and quantity of information stored by these objects may need to be changed or enhanced to accommodate additional or different data types. In this case, the definition of the class will, of necessity, be changed to support the new object data storage requirements. This scenario typically occurs when a program is upgraded from a first software version to a newer, more powerful version of the program. A new release of an existing program may use a combination of new classes and classes that were defined in a previous version. The processes and activities associated with modifying, updating, and tracking changes in a class over a period of time are known as "versioning."
It is important to note that, even though a program has been upgraded, it is frequently necessary to maintain both the existing objects that were created by the first version (belonging to one version of a class) and the new objects that are created by the newer version of the software application (belonging to a different version of the same class). In order to accomplish this, some mechanism should be provided to track the various names of the object classes as the versions of the software application are changed. Theoretically, it is possible to give each new class version the same name. However, in practice, JAVA requires that each new version of the class have a new name. This means that as time passes and multiple versions of the various classes are changed, it can become very difficult to keep track of the many different names for each class and the related objects that are created.
For example, a large company that has been in business for many years may have changed the nature of the object used to store employee-related data as the information needs of the business developed. Beginning in 1970, the employee object tracked the name, address, phone number, date of hire, supervisor, and salary for each employee. In 1980 the definition of the objects in the employee class was changed to include information regarding 401K plans for the employee and in 1990 the definition for the employee class was changed again to include information regarding each employee's performance and evaluation reviews.
There are several solutions that have been previously implemented to address the versioning problems associated with multiple names for different versions of the same class. Typically, when a new version of a software application is to be implemented, the software application is recompiled and the system must be shut down. When the new version of the software application is loaded, the system will recognize that a new version has been created, load all the existing objects, and rebuild the objects one by one so that they are compatible with the new version of the software application. This process may also include a re-naming of all existing objects. While this solution is acceptable for systems with a limited number of objects, once the number of objects in the system exceeds a certain minimal level, the operational overhead associated with rebuilding each object in the system every time the version changes can quickly become unacceptable.
Another possible solution is to create a sub-class for the new version of the objects as they are needed. This solution, while useful, has its own inherent limitations. Specifically, as each new version of the class is created, another level in the class hierarchy is established. After a period of time, tracking class versions through the nested hierarchy of classes and sub-classes becomes extremely inefficient and can measurably reduce system performance.
Without a mechanism for more easily and flexibly creating, managing, and tracking the various versions of object classes that must be utilized in a large-scale, frequently evolving object-oriented environment, the computer industry will continue to suffer from the effects of the inefficient versioning methods presently used to manage new class versions. In addition, the creation of objects according to the desired class version will continue to be more difficult and uncertain than necessary.